package com.pactera.asmp.server.pojo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.pactera.asmp.server.common.utils.FastJsonUtil;
import com.pactera.asmp.server.entity.TaskDTO;

import net.sf.oval.constraint.NotNull;

import java.io.Serializable;
import java.time.LocalDateTime;

import lombok.Data;

/**
 * @ProjectName: tlsserver
 * @Package com.pactera.asmp.server.pojo
 * @ClassName: DeviceInfo
 * @Description: 设备描述
 * @Date 2020/06/22 17:39
 * @Author lvzhiqiang
 * @Version 1.0
 */
@Data
public class DeviceInfoWithProject implements Serializable,Comparable<DeviceInfoWithProject> {

    private Integer id;
    /**
     * 设备唯一标识码
     * 防止有些设备所有的deviceid都是一样的导致无法区分
     */
    private String duid;
    /**
     * vin码
     */
    private String vin;
    /**
     * 设备序列号
     */
    private String sn;
    /**
     * 设备名
     */
    private String name;
    /**
     * 设备型号
     */
    private String model;

    /**
     * 品牌
     */
    private String brand;
    /**
     * 平台\n0-android\n1-iOS\n2-IOT
     */
    private int platform;
    /**
     * cpu类型
     */
    private String cpuAbi;
    /**
     * SDK 版本
     */
    private int sdkVersion;
    /**
     * 系统版本号
     */
    private String versionCode;
    /**
     * 设备状态\n0-空闲\n1-占用\n2-断线
     */
    private int status;
    /**
     * 屏幕高
     */
    private int height;
    /**
     * 屏幕宽
     */
    private int width;
    /**
     * 设备注册时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime registerTime;
    /**
     * 设备断开时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime disconnectTime;
    /**
     * 设备示意图片索引
     */
    private String iconIndex;
    /**
     * 控制这台设备的上位机ID
     */
    private Integer masterComputerId;
    /**
     * 最后使用这台设备的用户id
     */
    @NotNull
    private Integer userId;    // 暂时不用，因为终端设备无法传递过来
    /**
     * 使用上位机配置指定设备的主人
     */
    private Integer masterUid;
    /**
     * 当前谁使用该设备，其用户名
     */
    private String userName;// 暂时不用，因为终端设备无法传递过来

    /**
     * 任务Id, 当设备正在执行任务，且断线重连时，告诉后端服务，当前设备正在执行的任务Id
     */
    private Integer taskId;

    /**
     * 任务的创建人Id, 不需要前端传递，后台自行查询
     */
    private Integer taskUserId;
    /**
     * 任务的创建人姓名, 不需要前端传递，后台自行查询
     */
    private String taskUserName;

    /**
     * 项目ID
     * 当前仅限获取项目详情时使用，即当前项目是否已经绑定此设备
     */
    private Integer projectId;

    /**
     * 昵称
     */
    private String nickName;


    /**
     * can port，如：CMD1
     */
    private String canCode;

    /**
     * can 状态，1-在线，2-离线
     */
    private byte canState;

    private String cuid;

    /**
     * 设备类型
     */
    private Integer type;

    /**
     * 多屏ids
     */
    private String displayIdsStr;

    private Integer isAuxiliary;

    private TaskDTO taskDTO;

    @Override
    public String toString() {
        return FastJsonUtil.BeanToJson(this);
    }

    @Override
    public int compareTo(DeviceInfoWithProject o) {
        // 1. 已绑定的设备在前，未绑定的在后
        if(this.getProjectId() != null && this.getProjectId() != -1 && ( o.getProjectId() == null ||  o.getProjectId() == -1)) return -1;
        if((this.getProjectId() == null || this.getProjectId() == -1) && o.getProjectId() != null && o.getProjectId() != -1) return 1;

        // 2. 空闲->占用->断线
        return this.getStatus() - o.getStatus();
    }
}
